/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ru.jSkyRoom.interfaces.major;

import java.util.Collection;
import java.util.Map;
import ru.jSkyRoom.interfaces.additional.HasHeadParts;
import ru.jSkyRoom.interfaces.additional.HasHeight;
import ru.jSkyRoom.interfaces.additional.HasRace;
import ru.jSkyRoom.interfaces.additional.HasScript;
import ru.jSkyRoom.interfaces.additional.HasShortName;
import ru.jSkyRoom.interfaces.additional.HasSoundVolume;
import ru.jSkyRoom.interfaces.additional.HasSpells;
import ru.jSkyRoom.interfaces.additional.HasTemplate;
import ru.jSkyRoom.interfaces.additional.HasVoiceType;
import ru.jSkyRoom.interfaces.additional.HasWeight;
import ru.jSkyRoom.interfaces.additional.Owner;
import ru.jSkyRoom.interfaces.stub.AIPackage;
import ru.jSkyRoom.interfaces.stub.AudioTemplate;
import ru.jSkyRoom.interfaces.stub.CombatStyle;
import ru.jSkyRoom.interfaces.stub.JSkyColor;
import ru.jSkyRoom.interfaces.stub.NPCClass;
import ru.jSkyRoom.interfaces.sub.FacePart;
import ru.jSkyRoom.interfaces.sub.FaceTint;
import ru.jSkyRoom.interfaces.sub.SkillDescription;
import ru.jSkyRoom.interfaces.sub.Stat;
import skyproc.NPC_;
import skyproc.NPC_.Aggression;
import skyproc.NPC_.NPCFlag;
import skyproc.NPC_.TemplateFlag;
import skyproc.NPC_.TintLayer;
import skyproc.RGB;
import skyproc.genenums.Skill;

/**
 *
 * @author Rakev
 */
public interface NPC extends NamedMajor, Owner, HasScript, HasTemplate<NPC>, HasWeight, HasHeadParts, HasSoundVolume, HasRace, HasVoiceType, HasSpells, HasShortName, HasHeight {

    public boolean getFlag(TemplateFlag flag);

    public void setFlag(TemplateFlag flag);

    public void unsetFlag(TemplateFlag flag);

    public boolean getFlag(NPCFlag flag);

    public void setFlag(NPCFlag flag);

    public void unsetFlag(NPCFlag flag);

    public Map<Faction, Integer> getFactions();

    public void addFaction(Faction faction, int rank);

    public void removeFaction(Faction faction);

    public Map<Perk, Integer> getPerks();

    public void addPerk(Perk perk, int rank);

    public void removePerk(Perk perk);

    public SkillDescription getSkillDescription(Skill skill);

    public Aggression getAggression();

    public void setAggression(Aggression level);

    public NPC_.Confidence getConfidence();

    public void setConfidence(NPC_.Confidence level);

    public NPC_.Morality getMorality();

    public void setMorality(NPC_.Morality level);

    public NPC_.Assistance getAssistance();

    public void setAssistance(NPC_.Assistance level);

    public Stat getStat(NPC_.NPCStat stat);

    public LeveledItemList getDeathItems();

    public void setDeathItems(LeveledItemList deathItems);

    public Map<Major, Integer> getItems();

    public void addItem(Major item, int count);

    public void removeItem(Major item);

    public Collection<AIPackage> getAIPackages();

    public void addAIPackage(AIPackage aiPackage);

    public void removeAIPackage(AIPackage aiPackage);

    public NPCClass getNPCClass();

    public void setNPCClass(NPCClass npcClass);

    public JSkyColor getHairColor();

    public void setHairColor(JSkyColor hairColor);

    public Armor getSkin();

    public void setSkin(Armor skin);

    public Race getAttackRace();

    public void setAttackRace(Race attackRace);

    public Outfit getDefaultOutfit();

    public void setDefaultOutfit(Outfit defaultOutfit);

    public Outfit getSleepingOutfit();

    public void setSleepingOutfit(Outfit sleepingOutfit);

    public CombatStyle getCombatStyle();

    public void setCombatStyle(CombatStyle combat);

    public Faction getCrimeFaction();

    public void setCrimeFaction(Faction crimeFaction);

    public Texture getFaceTextures();

    public void setFaceTextures(Texture set);

    public AudioTemplate getAudioTemplate();

    public void setAudioTemplate(AudioTemplate audioTemplate);

    public FormList getDefaultPackageList();

    public void setDefaultPackageList(FormList list);

    public Armor getFarAwayModelSkin();

    public void setFarAwayModelSkin(Armor armor);

    public float getFarAwayModelDistance();

    public void setFarAwayModelDistance(float dist);

    public int getHealthOffset();

    public void setHealthOffset(int value);

    public int getMagickaOffset();

    public void setMagickaOffset(int value);

    public int getStaminaOffset();

    public void setStaminaOffset(int value);

    public NPC_.Mood getMood();

    public void setMood(NPC_.Mood value);

    public int getStamina();

    public void setStamina(int energy);

    public int getAggroWarn();

    public void setAggroWarn(int aggro);

    public int getAggroWarnAttack();

    public void setAggroWarnAttack(int aggro);

    public int getAggroAttack();

    public void setAggroAttack(int aggro);

    public FormList getGiftFilter();

    public void setGiftFilter(FormList filter);

    public int getGearedUpWeapons();

    public void setGearedUpWeapons(int value);

    public FormList getSpectatorOverride();

    public void setSpectatorOverride(FormList list);

    public FormList getObserveDeadOverride();

    public void setObserveDeadOverride(FormList list);

    public FormList getGuardWarnOverride();

    public void setGuardWarnOverride(FormList list);

    public FormList getCombatOverride();

    public void setCombatOverride(FormList list);

    public FacePart getFace(NPC_.FacePart part);

    public Collection<TintLayer> getTintings();

    public void addTinting(TintLayer tinting);

    public void removeTinting(TintLayer tinting);

    public Collection<NPC_.SoundPackage> getSounds();

    public void addSoundPackage(NPC_.SoundPackage sounds);

    public void removeSoundPackage(NPC_.SoundPackage sounds);

    public FaceTint getFaceTint(RGB color);

    public int getNosePreset();

    public void setNosePreset(int val);

    public int getEyePreset();

    public void setEyePreset(int val);

    public int getMouthPreset();

    public void setMouthPreset(int val);

}
